{"version":3,"file":"static/chunks/pages/[[...page]]-20f3faa1670f4072.js","mappings":"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","sources":["webpack://_N_E/?08f1","webpack://_N_E/./components/molecules/AnchorNavigation/AnchorNavigation.js","webpack://_N_E/./components/global/PageContent.js","webpack://_N_E/./pages/[[...page]].js","webpack://_N_E/./node_modules/next/error.js"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/[[...page]]\",\n function () {\n return require(\"private-next-pages/[[...page]].js\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/[[...page]]\"])\n });\n }\n ","import PropTypes from 'prop-types';\nimport cn from 'class-names';\nimport { useEffect } from 'react';\n\nimport { getContent } from '@/utils/helper';\nimport { analytics, getAnchorNavigationDetail } from '@/utils/analytics';\n\nimport CtfCta from '@/molecules/CTA/index';\n\nconst MAXIMUM_POSITION_TOP_ACTIVE_PX = 200;\nexport default function AnchorNavigation({\n anchor: { sys: { id: anchorId } } = {},\n entries,\n}) {\n const handleAnchorNavigate = (e) => {\n analytics({\n window,\n document,\n detail: getAnchorNavigationDetail(e),\n });\n };\n\n const anchorContent = getContent(anchorId, entries);\n const fields = anchorContent?.fields;\n\n // listen to scroll events and update anchor navigation active status\n useEffect(() => {\n if (!fields?.links?.length) {\n return;\n }\n\n const handleScroll = () => {\n // add/remove anchor class on scroll\n const anchorNavs = document.querySelectorAll(\n '.aaco-anchor-navigation > div > a'\n );\n const anchorNavsSize = anchorNavs?.length || 0;\n anchorNavs?.forEach((anchor, index) => {\n // 1. get CURRENT anchor position\n const id = anchor?.getAttribute('href');\n const targetElement = document.querySelector(id);\n if (!targetElement) {\n return;\n }\n const targetElementPositon = targetElement?.getBoundingClientRect();\n\n // 2. get NEXT anchor position\n const nextIndex = index + 1;\n const hasNextIndex = nextIndex < anchorNavsSize;\n let nextTargetElementPositon;\n if (hasNextIndex) {\n const nextAnchor = anchorNavs[nextIndex];\n const nextId = nextAnchor?.getAttribute('href');\n const nextTargetElement = document.querySelector(nextId);\n\n if (nextTargetElement) {\n nextTargetElementPositon =\n nextTargetElement?.getBoundingClientRect();\n }\n }\n\n // 3. check if\n ////// - current anchor top is in the active range\n const isInActiveRange =\n targetElementPositon.top < MAXIMUM_POSITION_TOP_ACTIVE_PX;\n ////// - next anchor top is outside the active range\n const isNextAnchorOutsideActiveRange =\n nextTargetElementPositon?.top > MAXIMUM_POSITION_TOP_ACTIVE_PX;\n ////// purpose: only mark the last active anchor as active\n const isLastAnchorInActiveRange =\n isInActiveRange && (!hasNextIndex || isNextAnchorOutsideActiveRange);\n if (isLastAnchorInActiveRange) {\n anchor.classList.add('active');\n } else {\n anchor.classList.remove('active');\n }\n });\n };\n window.addEventListener('scroll', handleScroll);\n return () => document.removeEventListener('scroll', handleScroll);\n }, [fields?.links]);\n\n return (\n \n {fields?.links?.length > 0 &&\n fields.links.map((field) => (\n
\n \n
\n ))}\n \n );\n}\n\nAnchorNavigation.propTypes = {\n anchor: PropTypes.object,\n entries: PropTypes.array,\n};\n","import { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { analytics, getScrollToTopDetail } from '@/utils/analytics';\nimport { isDDEnv, isWHEnv } from '@/utils/helper';\n\nimport ButtonIcon from '@/atoms/ButtonIcon/ButtonIcon';\n\nexport default function PageContent({ children, anchorNavigation }) {\n const [showButton, setShowButton] = useState(false);\n const [showAnchor, setShowAnchor] = useState(false);\n\n useEffect(() => {\n const handleScroll = () => {\n const hasOverflow = window.pageYOffset > 200;\n setShowButton(hasOverflow);\n\n const windowHeight = window.innerHeight;\n const hasOverflowExceedWindowHeight = window.pageYOffset > windowHeight;\n setShowAnchor(hasOverflowExceedWindowHeight);\n };\n\n window.addEventListener('scroll', handleScroll);\n\n return () => document.removeEventListener('scroll', handleScroll);\n }, []);\n\n const scrollToTop = (e) => {\n analytics({\n window,\n document,\n detail: getScrollToTopDetail(e),\n });\n\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n };\n\n const isWH = isWHEnv();\n const isDD = isDDEnv();\n return (\n <>\n {children}\n {showAnchor && isWH && anchorNavigation}\n {showButton && (\n <>\n {isDD && anchorNavigation}\n
\n \n
\n \n )}\n \n );\n}\n\nPageContent.propTypes = {\n children: PropTypes.node,\n anchorNavigation: PropTypes.node,\n};\n","import { useContext, useEffect, useRef, useState } from 'react';\nimport ErrorPage from 'next/error';\nimport Head from 'next/head';\nimport PropTypes from 'prop-types';\nimport { useRouter } from 'next/router';\n\nimport { DispatchContext } from '@/context/index';\n\nimport {\n getAllPages,\n getPage,\n getDynamicPages,\n getTagsByTagGroupId,\n getAllTagGroups,\n getAllEnvironments,\n switchEnvironment,\n getTotalRequests,\n getRequests,\n switchToPreview,\n switchToMain,\n getTagsByIds,\n resetCache,\n} from '@/utils/api';\nimport {\n getContent,\n findContentIndex,\n findOneContentByType,\n isDDEnv,\n isWHEnv,\n} from '@/utils/helper';\n\nimport AnchorNavigation from '@/molecules/AnchorNavigation/AnchorNavigation';\nimport BlockRenderer from '@/global/BlockRenderer';\nimport PageContent from '@/global/PageContent';\n\nimport {\n CtfPageSlug,\n CtfTags,\n PaginationDefaults,\n CtfContentQueryOrder,\n ContentQueryOrder,\n} from '@/utils/constants';\n\nfunction Page({\n page,\n assets,\n entries,\n customEnvironment,\n robotsIndex,\n pageTags,\n showVersion,\n}) {\n const router = useRouter();\n const dispatch = useContext(DispatchContext);\n const container = useRef(null);\n useEffect(() => {\n if (customEnvironment) {\n dispatch({\n \"type\": \"SET_ENVIRONMENT\",\n \"payload\": customEnvironment,\n });\n\n switchEnvironment(customEnvironment);\n }\n }, [customEnvironment, dispatch])\n\n const anchorNavigation = findOneContentByType(\n 'anchorNavigation',\n page,\n entries\n );\n\n const pagePreviewContent =\n page?.fields?.metaDescription ? page?.fields.metaDescription : page?.fields?.previewText &&\n getContent(page?.fields?.previewText?.sys?.id, entries)?.fields?.text\n ?.content?.[0]?.content?.[0]?.value;\n const hostname = process.env.NEXT_PUBLIC_URL ?? '/';\n const canonicalHost = process.env.NEXT_PUBLIC_URL_WWW ?? '/';\n const pageUrl = `${canonicalHost}${router?.asPath}`;\n const navigationColor = page?.fields?.navigationColor ?? 'warmer-grey';\n const pageNoIndexNoFollow = !!page?.fields?.noIndexNoFollow;\n\n const isDD = isDDEnv();\n const isWH = isWHEnv()\n\n const showDefaultAnchorNavigation = isDD\n\n\n return (\n
\n \n {pagePreviewContent && (\n \n )}\n {page?.fields.slug === 'our-cuts' && (<>\n \n \n )}\n \n {(!robotsIndex || pageNoIndexNoFollow) && (\n \n )}\n {page.fields.title}\n \n \n )\n }\n >\n \n \n
\n );\n}\n\nPage.propTypes = {\n page: PropTypes.object,\n};\n\nexport default Page;\n\nexport async function getStaticProps({ preview = false, params, locale }) {\n let page = null;\n let entries = [];\n let assets = [];\n let customEnvironment = null;\n let robotsIndex = true;\n let showVersion = false;\n\n if (process.env.APP_ENV !== 'production') {\n robotsIndex = false;\n showVersion = true;\n\n const environments = (await getAllEnvironments())?.data?.items?.map((i) => i.name);\n if (params.page && environments.includes(params.page[0])) {\n switchEnvironment(params.page[0]);\n customEnvironment = params.page[0];\n params.page = params.page.splice(1);\n }\n }\n\n if (preview) {\n switchToPreview();\n } else {\n switchToMain();\n }\n\n // TODO: Confirm if we use slug='home' as the homepage identifier.\n const payload = {\n slug: params.page && params.page.length ? params.page[0] : CtfPageSlug.HOME,\n preview,\n };\n\n // Reset cache because Azure Function might treat this as a long-running process which would prevent static cache\n // from updating properly\n resetCache();\n const resp = await getPage(payload, 10, locale);\n if (resp.status !== 200 || !resp.data || resp.data.items.length === 0) {\n return {\n notFound: true,\n revalidate: true,\n };\n }\n\n // Set the page data\n page = resp.data?.items?.[0] || {};\n\n // Supply the entries and assets\n if (resp.data?.includes) {\n entries = resp.data.includes?.Entry ?? [];\n assets = resp.data.includes?.Asset ?? [];\n }\n\n const pageTags = page.fields?.['tags']?.map((tag) => entries.find((entry) => entry?.sys?.id === tag?.sys?.id)) || null;\n\n const getEntriesToProcess = (links) => {\n let entryIds = [];\n links.forEach((link) => {\n entryIds.push(link.sys.id);\n const content = getContent(link.sys.id, entries);\n\n if (!content) {\n return;\n }\n\n Object.entries(content.fields).forEach(([entry, field]) => {\n // This method is mostly to avoid recursively resolving sub-page data\n if (\n !field ||\n (entry === 'content' && content.sys.contentType.sys.id === 'page' && content.fields.slug !== page.fields.slug)\n ) {\n return;\n }\n\n if (field.sys && field.sys.id) {\n entryIds = [...getEntriesToProcess([field]), ...entryIds];\n } else if (field[0] && field[0].sys && field[0].sys.id) {\n entryIds = [...getEntriesToProcess(field), ...entryIds];\n }\n });\n });\n\n return entryIds;\n };\n\n const contentToProcess = [\n ...(page?.fields?.content || []),\n page?.fields?.previewText,\n ].filter((content) => content);\n const entryIds = contentToProcess\n ? getEntriesToProcess(contentToProcess)\n : [];\n entries = entries.filter(c => entryIds.includes(c.sys.id) || ['tag', 'tagGroup'].includes(c.sys.contentType.sys.id));\n entries.push(page);\n\n // Do a loop of page's content and check each component for:\n // - if it has queryTags field then fetch the required data and store it in fields.pages\n // - if it has tagGroups field then fetch the tags for each tagGroup\n let newEntries = [];\n let newAssets = [];\n entries = await (entries ? Promise.all(\n entries.map(async (content) => {\n // Strip away unnecessary fields\n content = {\n sys: {\n id: content?.sys?.id,\n contentType: {\n sys: {\n id: content?.sys?.contentType?.sys?.id,\n }\n }\n },\n fields: content.fields,\n };\n\n if (!entryIds.includes(content.sys.id)) {\n return content;\n }\n\n if (content.sys.contentType.sys.id === 'navigation') {\n //fetch all tagGroups and it tags for search area\n const resp = await getAllTagGroups(preview);\n\n //construct array of object of tagGroup with tags\n let tagGroupsWithTags = null;\n if (resp.data.items) {\n tagGroupsWithTags = await Promise.all(\n Object.values(resp.data.items).map(async (j) => {\n const tags = await getTagsByTagGroupId(j.sys.id);\n return {\n id: j.sys.id,\n name: j.fields.name ?? null,\n slug: j.fields.slug || null,\n tags:\n tags?.data?.items && Object.keys(tags?.data?.items)?.length > 0\n ? Object.values(tags.data.items)?.map((k) => {\n return {\n id: k.sys.id,\n name: k.fields.name ?? null,\n slug: k.fields.slug ?? '',\n };\n }) || null\n : null,\n };\n })\n );\n }\n\n //store tabGroupsWithTags data in fields.tagGroupsWithTags\n content = {\n ...content,\n fields: {\n ...content.fields,\n tagGroupsWithTags: tagGroupsWithTags || null,\n },\n };\n }\n\n if (content.fields.queryTags) {\n //handle default tags/filters\n const queryTagIds = content.fields.queryTags.map((j) => j.sys.id);\n //handle pagination\n let paginationNo = 1;\n let paginationLimit = PaginationDefaults.LIMIT;\n if (params.page && params.page[1] && !isNaN(params.page[1])) {\n paginationNo = params.page[1];\n }\n\n if (content.fields.queryTagsLimit) {\n paginationLimit = content.fields.queryTagsLimit;\n } else if (content.sys.contentType.sys.id === 'navigationLink') {\n paginationLimit = 1;\n } else if (content.sys.contentType.sys.id === 'cut') {\n paginationLimit = 3;\n }\n\n // Special case for Content Grid to have custom cards injected into them\n let offset = content.fields.queryTagsOffset ?? (paginationNo - 1) * paginationLimit;\n if (\n content.sys.contentType.sys.id === 'contentGrid' &&\n content.fields.cards\n ) {\n if (paginationNo <= content.fields.cards.length) {\n paginationLimit = paginationLimit - 1;\n } else {\n offset =\n content.fields.cards.length * (paginationLimit - 1) +\n (paginationNo - content.fields.cards.length - 1) *\n paginationLimit +\n 1;\n }\n }\n\n // Fetch Pages data & append new assets & entries\n const dynamicPages = await getDynamicPages(\n null,\n queryTagIds,\n paginationNo,\n paginationLimit,\n [...assets, ...newAssets],\n [...entries, ...newEntries],\n locale,\n offset,\n page.sys.id,\n ['cut', 'contentGrid'].includes(content.sys.contentType.sys.id) ? 'in' : 'all',\n CtfContentQueryOrder.CREATE_DATE === content.fields.contentQueryOrder\n ? ContentQueryOrder.CREATE_DATE\n : ContentQueryOrder.PUBLISH_DATE,\n preview\n );\n newAssets = [...newAssets, ...dynamicPages.filteredNewAssets];\n // Quick optimisation, only keep dynamic assets and taxonomy from these pages\n // Added blockText to the filter list since carousel component needs the entry data\n newEntries = [...newEntries, ...dynamicPages.filteredNewEntries.filter((p) => ['dynamicAsset', 'tag', 'tagGroup', 'blockText'].includes(p.sys.contentType.sys.id))];\n // Replace current Entry data with Entry with appended pages data\n // So that later it can be called using fields.pages\n // Also store default tag/filter in fields.queryTagIds\n content = {\n ...content,\n fields: {\n ...content.fields,\n pages: dynamicPages.resp?.data.items ?? [],\n totalPages: dynamicPages.resp?.data.total ?? 0,\n queryTagIds,\n },\n };\n }\n\n if (content.fields.tagGroups) {\n //get tagGroupIds\n const tagGroupIds = content.fields.tagGroups.map((j) => j.sys.id);\n\n //construct array of object of tagGroup with tags\n const tagGroupsWithTags =\n tagGroupIds?.length > 0\n ? await Promise.all(\n tagGroupIds.map(async (j) => {\n const tagGroup = getContent(j, entries);\n const tags = await getTagsByTagGroupId(j);\n return {\n id: tagGroup.sys.id,\n name: tagGroup.fields.name ?? null,\n slug: tagGroup.fields.slug,\n tags:\n tags?.data?.items?.length > 0\n ? tags.data.items\n ?.map((k) => {\n return {\n id: k.sys.id,\n name: k.fields.name ?? null,\n slug: k.fields.slug ?? '',\n };\n })\n ?.filter((k) => k.name) || null\n : null,\n };\n })\n )\n : null;\n\n //store tabGroupsWithTags data in fields.tagGroupsWithTags\n content = {\n ...content,\n fields: {\n ...content.fields,\n tagGroupsWithTags,\n },\n };\n }\n\n return content;\n })\n )\n : null);\n\n const existingEntryIds = entries.map((j) => j.sys.id);\n newEntries.forEach((j) => !existingEntryIds.includes(j.sys.id) ? entries.push(j) : undefined);\n\n const existingAssetIds = assets.map((j) => j.sys.id);\n newAssets.forEach((j) =>\n !existingAssetIds.includes(j.sys.id) ? assets.push(j) : undefined\n );\n\n const filteredAssets = [];\n entries.forEach(e => {\n Object.values(e.fields).forEach(v => {\n if (v && v.sys && v.sys.linkType && v.sys.linkType === 'Asset') {\n filteredAssets.push(v.sys.id);\n }\n });\n });\n\n assets = assets.filter(a => filteredAssets.includes(a.sys.id));\n\n const ret = {\n props: { preview, assets, entries, page, customEnvironment, robotsIndex, showVersion, pageTags },\n revalidate: 300,\n };\n\n if (\n process.env.APP_ENV === 'development' ||\n process.env.APP_ENV === 'staging'\n ) {\n ret.revalidate = 10;\n }\n\n if (\n resp.data.items.length === 0 ||\n preview ||\n (params.page && params.page[1])\n ) {\n ret.revalidate = 0;\n }\n\n return ret;\n}\n\nexport async function getStaticPaths() {\n return {\n paths: [],\n fallback: 'blocking',\n };\n}\n","module.exports = require('./dist/pages/_error')\n"],"names":["window","__NEXT_P","push","AnchorNavigation","fields","anchor","id","sys","entries","handleAnchorNavigate","e","analytics","document","detail","getAnchorNavigationDetail","anchorContent","getContent","anchorId","useEffect","links","length","handleScroll","anchorNavs","querySelectorAll","anchorNavsSize","forEach","index","getAttribute","targetElement","querySelector","nextTargetElementPositon","targetElementPositon","getBoundingClientRect","nextIndex","hasNextIndex","nextAnchor","nextId","nextTargetElement","isInActiveRange","top","isNextAnchorOutsideActiveRange","classList","add","remove","addEventListener","removeEventListener","div","className","cn","map","field","CtfCta","noWrap","hideIcon","onClick","propTypes","PropTypes","PageContent","children","anchorNavigation","useState","showButton","setShowButton","showAnchor","setShowAnchor","hasOverflow","pageYOffset","windowHeight","innerHeight","hasOverflowExceedWindowHeight","isWH","isWHEnv","isDD","isDDEnv","ButtonIcon","style","getScrollToTopDetail","scrollTo","behavior","icon","role","width","height","Page","page","assets","customEnvironment","robotsIndex","pageTags","showVersion","router","useRouter","dispatch","useContext","DispatchContext","container","useRef","switchEnvironment","process","findOneContentByType","pagePreviewContent","metaDescription","previewText","text","content","value","hostname","canonicalHost","pageUrl","asPath","navigationColor","pageNoIndexNoFollow","noIndexNoFollow","showDefaultAnchorNavigation","ref","aria-label","slug","Head","meta","name","link","rel","href","hrefLang","canonicalTag","title","BlockRenderer","blocks","tags","pageTitle","module","exports"],"sourceRoot":""}